package com.version1.diabeco.ui.ajustes;


import java.util.ArrayList;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;


import com.version1.diabeco.ListAdapter;
import com.version1.diabeco.R;
import com.version1.diabeco.data.ajustes.perfilusuario.PerfilUsuarioDaoImpl;
import com.version1.diabeco.model.ajustes.AjustesFila;
import com.version1.diabeco.model.ajustes.perfilusuario.PerfilUsuario;
import com.version1.diabeco.service.AlarmaInicializador;
import com.version1.diabeco.ui.ajustes.alarmas.ActivityAlarmas;
import com.version1.diabeco.ui.ajustes.medicamento.ActivityListaRegistrosMedicamento;
import com.version1.diabeco.ui.ajustes.perfilusuario.ActivityPerfilUsuario;
import com.version1.diabeco.ui.peso.ActivityRegistroPeso;

public class ActivityAjustes extends Activity {
	private ArrayList<AjustesFila> objListaAjustes;
	private ListView listViewAjustes;
	private PerfilUsuario objPerfilUsuario;
	private ArrayAdapter<String> myAdap;
	private int banderaCambios = 0;

	private static int REQUEST_CODE_SET_ALARMAS = 12922;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_ajustes);

		//Cargamos el Perfil de Usuario de la Base de Datos
		objPerfilUsuario = PerfilUsuarioDaoImpl.getInstance(this).selectUsuarioActivo();
		
		//Creamos el ArrayList que va contener laps filas tipo AjustesFila
		objListaAjustes = new ArrayList<AjustesFila>();
		
		//Obtenemos la referencia al list view
		listViewAjustes = (ListView) findViewById(R.id.listViewAjustes);
        
		//Cargamos la listViewAjustes
		CargarListaAjustes();
		
		//Seteo del click sobre la listViewAjustes
	    listViewAjustes.setOnItemClickListener(new OnItemClickListener() { 
		
	    @Override //Evento que se lanza al hacer click en un item de la lista
		public void onItemClick(AdapterView<?> pariente, View view, int posicion, long id) {
	    	Intent intent;
	    	int spinnerPosition = 0;
	    	
	    	Resources res = getResources();
	    	AjustesFila elegido = (AjustesFila) pariente.getItemAtPosition(posicion); 

			switch (elegido.get_imagen()) {
				case R.drawable.ic_perfil_usuario:
					//Iniciamos la nueva actividad
					intent = new Intent(ActivityAjustes.this, ActivityPerfilUsuario.class);
					startActivity(intent);
					break;
					
				case R.drawable.ic_glucosa:
					//Obtenemos el Array y cargamos el valor seleccionado
					String[] listUmGlugosa = res.getStringArray(R.array.lb_um_glucosa);
					myAdap = new ArrayAdapter<String>(ActivityAjustes.this, android.R.layout.simple_list_item_1, listUmGlugosa);
					
					if (objPerfilUsuario != null) {
						String umGlucosa = objPerfilUsuario.getUmGlucosa();
						
						if (umGlucosa == null) {
							spinnerPosition = 0;
						} else {
							spinnerPosition = myAdap.getPosition(umGlucosa);
						}						
					}

									
					dialogRadioButtonsGlucosa(R.string.ajustes_titulo_glucosa, R.array.lb_um_glucosa, spinnerPosition, R.drawable.ic_glucosa);
					break;
					
				case R.drawable.ic_peso:
					if (objPerfilUsuario != null) {
						String umPeso = objPerfilUsuario.getUmPeso();
	
						//Obtenemos el Array y cargamos el valor seleccionado
						String[] listUmPeso = res.getStringArray(R.array.lb_um_peso);
						myAdap = new ArrayAdapter<String>(ActivityAjustes.this, android.R.layout.simple_list_item_1, listUmPeso);
						
						if (umPeso == null) {
							spinnerPosition = 0;
						} else {
							spinnerPosition = myAdap.getPosition(umPeso);
						}
					}
					dialogRadioButtonsPeso(R.string.ajustes_titulo_peso, R.array.lb_um_peso, spinnerPosition, R.drawable.ic_peso);
					break;
					
				case R.drawable.ic_distancia:
					if (objPerfilUsuario != null) {
						String umAltura = objPerfilUsuario.getUmAltura();
	
						//Obtenemos el Array y cargamos el valor seleccionado
						String[] listUmAltura = res.getStringArray(R.array.lb_um_metrica);
						myAdap = new ArrayAdapter<String>(ActivityAjustes.this, android.R.layout.simple_list_item_1, listUmAltura);
						
						if (umAltura == null) {
							spinnerPosition = 0;
						} else {
							spinnerPosition = myAdap.getPosition(umAltura);
						}
					}
					
					dialogRadioButtonsDistancia(R.string.ajustes_titulo_distancia, R.array.lb_um_metrica, spinnerPosition, R.drawable.ic_distancia);
					break;
				
				case R.drawable.ic_medicamento:
					//Iniciamos la nueva actividad
					intent = new Intent(ActivityAjustes.this, ActivityListaRegistrosMedicamento.class);
					startActivity(intent);
					break;
				case R.drawable.ic_alarma:	
					//Iniciamos la nueva actividad
					intent = new Intent(ActivityAjustes.this, ActivityAlarmas.class);
					startActivityForResult(intent, REQUEST_CODE_SET_ALARMAS);
				default:
					break;
				}
			}
	     });
	}

	
	@Override
	protected void onResume() {
		super.onResume();
		
		//Cargamos el Perfil de Usuario de la Base de Datos
		objPerfilUsuario = PerfilUsuarioDaoImpl.getInstance(this).selectUsuarioActivo();
	}
	
	
	@Override
	protected void onPause() {
		super.onPause();
		if (banderaCambios == 1) {
			guardarAjustes();
			banderaCambios = 0;
		} 
		
	}	
	
	
	private void guardarAjustes() {

		//Grabamos como usuario activo
		PerfilUsuarioDaoImpl.getInstance(this).save(objPerfilUsuario, 1);

		// Salimos
		Toast.makeText(this, "Ajustes Guardados", Toast.LENGTH_SHORT).show();
		this.finish();
	}


	/** Cargamos la lista de Ajustes **/
	public void CargarListaAjustes() {
		// Cargamos la lista de Settings 
		String textTitulo, textSubtitulo; 
		
		//Agregamos las entradas a la lista
		textTitulo = getString(R.string.ajustes_titulo_usuario);
		textSubtitulo = getString(R.string.ajustes_subtitulo_usuario);
		objListaAjustes.add(new AjustesFila(R.drawable.ic_perfil_usuario, textTitulo, textSubtitulo ));

		textTitulo = getString(R.string.ajustes_titulo_glucosa);
		textSubtitulo = getString(R.string.ajustes_subtitulo_glucosa);
		objListaAjustes.add(new AjustesFila(R.drawable.ic_glucosa, textTitulo, textSubtitulo ));
		
		textTitulo = getString(R.string.ajustes_titulo_peso);
		textSubtitulo = getString(R.string.ajustes_subtitulo_peso);
		objListaAjustes.add(new AjustesFila(R.drawable.ic_peso, textTitulo, textSubtitulo ));
		
		textTitulo = getString(R.string.ajustes_titulo_distancia);
		textSubtitulo = getString(R.string.ajustes_subtitulo_distancia);
		objListaAjustes.add(new AjustesFila(R.drawable.ic_distancia, textTitulo, textSubtitulo ));

		textTitulo = getString(R.string.ajustes_titulo_medicacion);
		textSubtitulo = getString(R.string.ajustes_subtitulo_medicacion);
		objListaAjustes.add(new AjustesFila(R.drawable.ic_medicamento, textTitulo, textSubtitulo ));
		
		textTitulo = getString(R.string.ajustes_titulo_alarma);
		textSubtitulo = getString(R.string.ajustes_subtitulo_alarma);
		objListaAjustes.add(new AjustesFila(R.drawable.ic_alarma, textTitulo, textSubtitulo ));
		
		/**Codigo para usar el Adaptador **/
	       listViewAjustes.setAdapter(new ListAdapter(this, R.layout.activity_ajustes_fila, objListaAjustes){				
	    	   @Override
				public void onEntrada(Object entrada, View view) {
			        if (entrada != null) {
			            TextView texto_superior_entrada = (TextView) view.findViewById(R.id.textViewAjustesFilaTitulo); 
			            if (texto_superior_entrada != null) 
			            	texto_superior_entrada.setText(((AjustesFila) entrada).get_titulo()); 

			            TextView texto_inferior_entrada = (TextView) view.findViewById(R.id.textViewAjustesFilaSubTitulo); 
			            if (texto_inferior_entrada != null)
			            	texto_inferior_entrada.setText(((AjustesFila) entrada).get_subtitulo()); 

			            ImageView imagen_entrada = (ImageView) view.findViewById(R.id.imageViewAjustesFila); 
			            if (imagen_entrada != null)
			            	imagen_entrada.setImageResource(((AjustesFila) entrada).get_imagen());
			        }
				}
			});	
	}
	

	/** PopUp para Mostrar una lista de valores(RadioButtons) **/
	public void dialogRadioButtonsGlucosa(int title, int list, int selected, int icon) {
		AlertDialog popup;
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		
		 
		builder.setIcon(icon);
		builder.setCancelable(false);
		builder.setTitle(title);
		builder.setSingleChoiceItems(list, selected, new DialogInterface.OnClickListener() {
			
		    public void onClick(DialogInterface dialog, int selectedItem) {
		    	String umGlucosa;

		    	umGlucosa = myAdap.getItem(selectedItem);
				objPerfilUsuario.setUmGlucosa(umGlucosa);
				banderaCambios = 1;
		        dialog.cancel();
		    }
		});
		
		
	    //Boton Cancelar
        builder.setNegativeButton(R.string.btn_cancelar, new DialogInterface.OnClickListener() {

        			public void onClick(DialogInterface dialog, int id) {
                	   dialog.cancel();
                   }
        });
        
        //Cremos el PopUp y lo mostramos
		popup = builder.create();
		popup.show();
	}
	

	/** PopUp para Mostrar una lista de valores(RadioButtons) **/
	public void dialogRadioButtonsPeso(int title, int list, int selected, int icon) {
		AlertDialog popup;
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		
		 
		builder.setIcon(icon);
		builder.setCancelable(false);
		builder.setTitle(title);
		builder.setSingleChoiceItems(list, selected, new DialogInterface.OnClickListener() {
			
		    public void onClick(DialogInterface dialog, int selectedItem) {
		    	String umPeso;

		    	umPeso = myAdap.getItem(selectedItem);
				objPerfilUsuario.setUmPeso(umPeso);
				banderaCambios = 1;
		        dialog.cancel();
		    }
		});
		
		
	    //Boton Cancelar
        builder.setNegativeButton(R.string.btn_cancelar, new DialogInterface.OnClickListener() {

        			public void onClick(DialogInterface dialog, int id) {
                	   dialog.cancel();
                   }
        });
        
        //Cremos el PopUp y lo mostramos
		popup = builder.create();
		popup.show();
	}
	
	
	/** PopUp para Mostrar una lista de valores(RadioButtons) **/
	public void dialogRadioButtonsDistancia(int title, int list, int selected, int icon) {
		AlertDialog popup;
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		
		 
		builder.setIcon(icon);
		builder.setCancelable(false);
		builder.setTitle(title);
		builder.setSingleChoiceItems(list, selected, new DialogInterface.OnClickListener() {
			
		    public void onClick(DialogInterface dialog, int selectedItem) {
		    	String umAltura;

		    	umAltura = myAdap.getItem(selectedItem);
				objPerfilUsuario.setUmAltura(umAltura);
				banderaCambios = 1;
		        dialog.cancel();
		    }
		});
		
		
	    //Boton Cancelar
        builder.setNegativeButton(R.string.btn_cancelar, new DialogInterface.OnClickListener() {

        			public void onClick(DialogInterface dialog, int id) {
                	   dialog.cancel();
                   }
        });
        
        //Cremos el PopUp y lo mostramos
		popup = builder.create();
		popup.show();
	}	
//	public void dialogCheckBox() { //int title, int list, selected[]) {
////		 mSelectedItems = new ArrayList();  // Where we track the selected items
//			AlertDialog popup;
//			AlertDialog.Builder builder = new AlertDialog.Builder(this);
//		    
//		    // Set the dialog title
//		    builder.setTitle(R.string.app_name);
//		    
//		    // Specify the list array, the items to be selected by default (null for none),
//		    // and the listener through which to receive callbacks when items are selected
//		    builder.setMultiChoiceItems(R.array.lb_um_metrica, null,
//		                      new DialogInterface.OnMultiChoiceClickListener() {
//		               @Override
//		               public void onClick(DialogInterface dialog, int which,
//		                       boolean isChecked) {
////		                   if (isChecked) {
////		                       // If the user checked the item, add it to the selected items
////		                       mSelectedItems.add(which);
////		                   } else if (mSelectedItems.contains(which)) {
////		                       // Else, if the item is already in the array, remove it 
////		                       mSelectedItems.remove(Integer.valueOf(which));
////		                   }
//		               }
//		           });
//		    
//		       //Boton Aceptar
//		       builder.setPositiveButton(R.string.btn_aceptar, new DialogInterface.OnClickListener() {
//		               @Override
//		               public void onClick(DialogInterface dialog, int id) {
//		                   // User clicked OK, so save the mSelectedItems results somewhere
//		                   // or return them to the component that opened the dialog
//		                   
//		               }
//		           });
//		       
//		       //Boton Cancelar
//		       builder.setNegativeButton(R.string.btn_cancelar, new DialogInterface.OnClickListener() {
//		               @Override
//		               public void onClick(DialogInterface dialog, int id) {
//		            	   dialog.cancel();
//		               }
//		           });
//		       
//				popup = builder.create();
//				popup.show();		
//		}	
	
	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);

		if (requestCode == REQUEST_CODE_SET_ALARMAS) {

			// FIXME cada vez que vuelve del activity de alarmas se activan las alarmas. esto es debido a que las alarmas
			// se guardan directo a sharedproperties. pero ahora con esto alcanza.
			AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
			AlarmaInicializador.inicializarAlarmas(this.getBaseContext(), am);

		}

	}

}
